package com.huida.app.hutoolsusage;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.Instant;
import java.util.HashMap;

/**
 * @author wangzhuangzhuang
 * @DESC: 对象工具 —— ObjectUtil
 * @date 2022-01-10 16:11
 */
@SpringBootTest
public class ObjectUtilUsageDemo {
	// 默认值 借助于Lambda表达式，ObjectUtil可以完成判断给定的值是否为null,不为null则执行特定的逻辑功能

	@Test
	public void test01() {
		final String dateStr = null;

		// 此处判断如果dateStr为null，则调用“Instant.now()"，不为null则执行DateUtil.parse()
		Instant instant = ObjectUtil.defaultIfNull(dateStr,
				() -> DateUtil.parse(dateStr,
						DatePattern.NORM_DATETIME_PATTERN).toInstant(), Instant.now());
	}

	// 判断两个对象是否相等
	@Test
	public void test02() {
		// 比较两个对象是否相等, 相等需满足一下条件
		// 1. obj1 == null && obj2 == null
		// 2. obj1.equals(obj2)
		Object a = null;
		Object b = null;
		System.out.println(ObjectUtil.equals(a, b) ? "两者相等" : "两者不相等"); // 两者相等
	}

	// 得到对象的大小
	@Test
	public void test03(){
		// 计算对象长度
		// 字符串 =》 length
		// 集合类 =》 size
		// 数组 =》 length
		// 其他通过遍历元素个数来计算长度
		// 支持的类型包括
		// CharSequence、Collection、Map、Iterator、Enumeration、Array
		int[] array = new int[]{1, 2, 3, 4, 5, 6};
		int length = ObjectUtil.length(array);
		System.out.println("array's length: " + length); // array's length: 6

		HashMap<String, String> map = new HashMap<>();
		map.put("a", "a1");
		map.put("b", "b1");
		map.put("c", "c1");
		System.out.println("map's length: " + ObjectUtil.length(map)); // map's length: 3

		String info = "Hello World";
		System.out.println("info's length: " + ObjectUtil.length(info)); // info's length: 11
	}

	// 判断是否包含某一元素: 对象中是否包含元素
	// 支持的对象类型包括： String、Collection、Map、Iterator、Enumeration、Array
	@Test
	public void test04(){
		int[] array = new int[]{1, 2, 3, 4, 5};

		boolean contains = ObjectUtil.contains(array, 1);
		System.out.println("array中是否包含1？" + (contains ? "包含" : "不包含"));
	}


	// 判断是否为null
	// ObjectUtil.isNull
	// ObjectUtil.isNotNull
	// 【此方法不能判断对象中字段为空的情况，如果需要检查Bean对象中字段是否全空，请使用BeanUtil.isEmpty】
	@Test
	public void test05(){
		Object o = new Object();
		if(ObjectUtil.isNull(o)){
			System.out.println("该对象为空");
		}
		if(ObjectUtil.isNotNull(o)){
			System.out.println("该对象不为空");
		}
	}



}